package br.edu.infnet.avaliacao.model;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "questao", catalog = "avaliacao")
public class Questao implements java.io.Serializable {

	private static final long serialVersionUID = 7119284020967219108L;
	private Integer id;
	private String descricao;
	private Set<AvaliacaoQuestao> avaliacaoQuestaos = new HashSet<AvaliacaoQuestao>(
			0);
	private Set<DivisaoQuestionario> divisaoQuestionarios = new HashSet<DivisaoQuestionario>(
			0);

	public Questao() {
	}

	public Questao(String descricao) {
		this.descricao = descricao;
	}

	public Questao(String descricao, Set<AvaliacaoQuestao> avaliacaoQuestaos,
			Set<DivisaoQuestionario> divisaoQuestionarios) {
		this.descricao = descricao;
		this.avaliacaoQuestaos = avaliacaoQuestaos;
		this.divisaoQuestionarios = divisaoQuestionarios;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(name = "descricao", nullable = false)
	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "questao")
	public Set<AvaliacaoQuestao> getAvaliacaoQuestaos() {
		return this.avaliacaoQuestaos;
	}

	public void setAvaliacaoQuestaos(Set<AvaliacaoQuestao> avaliacaoQuestaos) {
		this.avaliacaoQuestaos = avaliacaoQuestaos;
	}

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "divisao_questao", catalog = "avaliacao", joinColumns = { @JoinColumn(name = "questao_id") }, inverseJoinColumns = { @JoinColumn(name = "divisao_questionario_id") })
	public Set<DivisaoQuestionario> getDivisaoQuestionarios() {
		return this.divisaoQuestionarios;
	}

	public void setDivisaoQuestionarios(
			Set<DivisaoQuestionario> divisaoQuestionarios) {
		this.divisaoQuestionarios = divisaoQuestionarios;
	}

}
